from fastapi import APIRouter, File, UploadFile
from fastapi.responses import StreamingResponse

from app.core.dependencies import FileServiceDep

router = APIRouter()


@router.post("/upload/devices", summary="批量上传设备信息")
async def upload_devices(
    file_service: FileServiceDep,
    file: UploadFile = File(..., description="设备信息文件 (CSV 或 XLSX)"),
):
    """
    通过上传 CSV 或 XLSX 文件批量导入设备信息。

    文件要求:
    - 文件格式: CSV (UTF-8 编码) 或 XLSX。
    - 表头 (列名) 必须包含: `name`, `management_ip`。
    - 可选表头: `port`, `account`, `password`, `enable_password`, `brand_name`, `model_name`, `area_name`, `device_type`, `description`。
    - `brand_name`, `area_name`, `model_name` 如果在数据库中不存在，将会被自动创建。
    """
    result = await file_service.import_devices(file)
    return result


@router.get("/download/devices", summary="批量下载设备信息")
async def download_devices(
    file_service: FileServiceDep,
):
    """
    下载所有设备信息为 XLSX 格式文件。
    """
    file_content, media_type, filename = await file_service.export_devices()
    return StreamingResponse(
        file_content,
        media_type=media_type,
        headers={"Content-Disposition": f"attachment; filename={filename}"},
    )
